Node.jsλ₯Ό μ¬μ©ν μ±λ΄ κ°λ° μΈκ³λ₯Ό νννμΈμ. μ΄ κ°μ΄λλ μ€μ λΆν° κ³ κΈ κΈ°λ₯κΉμ§ λ€λ£¨λ©°, μ§λ₯ν λνν μΈν°νμ΄μ€ ꡬμΆμ μν μ€μ©μ μΈ μμμ ν΅μ°°λ ₯μ μ 곡ν©λλ€.
μ±λ΄: Node.jsλ₯Ό μ΄μ©ν ꡬνμ λν ν¬κ΄μ μΈ κ°μ΄λ
μ±λ΄μ κΈ°μ μ΄ κ³ κ°κ³Ό μνΈ μμ©νλ λ°©μμ νμ νκ³ μμ΅λλ€. μ΄λ¬ν μ§λ₯ν λνν μΈν°νμ΄μ€λ μ¦κ°μ μΈ μ§μμ μ 곡νκ³ , μμ μ μλννλ©°, λ€μν νλ«νΌμμ μ¬μ©μ κ²½νμ ν₯μμν΅λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λλ κ°λ ₯νκ³ λ€μ¬λ€λ₯ν JavaScript λ°νμ νκ²½μΈ Node.jsλ₯Ό μ¬μ©νμ¬ μ±λ΄μ ꡬμΆνλ κ³Όμ μ μλ΄ν©λλ€.
μ±λ΄ κ°λ°μ Node.jsλ₯Ό μ¬μ©νλ μ΄μ
Node.jsλ μ±λ΄ κ°λ°μ λͺ κ°μ§ μ΄μ μ μ 곡ν©λλ€.
- νμ₯μ±: Node.jsλ λμ μμ² μ²λ¦¬λ₯Ό μν΄ μ€κ³λμ΄ λ§μ μμ μ¬μ©μλ₯Ό λμμ μ²λ¦¬ν΄μΌ νλ μ±λ΄μ μ΄μμ μ λλ€.
- μ€μκ° κΈ°λ₯: Node.jsλ μ€μκ° μ ν리μΌμ΄μ μ λ°μ΄λ μννκ³ λ°μμ±μ΄ λ°μ΄λ μ±λ΄ μνΈ μμ©μ κ°λ₯νκ² ν©λλ€.
- JavaScript μνκ³: μμ°μ΄ μ²λ¦¬(NLP), λ¨Έμ λ¬λ(ML) λ° API ν΅ν©μ μν λ°©λν JavaScript μνκ³μ μ½κ² μ¬μ©ν μ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμμμ€.
- νλ«νΌ κ° νΈνμ±: μΉ, λͺ¨λ°μΌ λ° λ©μμ§ μ±μ ν¬ν¨ν λ€μν νλ«νΌμ μ±λ΄μ λ°°ν¬νμΈμ.
- κ°λ°μ μμ°μ±: Node.jsλ κ°λ° μλκ° λΉ λ₯΄λ€λ κ²μΌλ‘ μλ €μ Έ μ±λ΄μ λ λΉ λ₯΄κ² μμ±νκ³ λ°λ³΅ν μ μμ΅λλ€.
κ°λ° νκ²½ μ€μ
μμνκΈ° μ μ λ€μμ΄ μ€μΉλμ΄ μλμ§ νμΈνμμμ€.
- Node.js: nodejs.orgμμ μ΅μ λ²μ μ λ€μ΄λ‘λνμ¬ μ€μΉνμμμ€.
- npm(Node Package Manager): npmμ Node.jsμ ν¨κ» μ 곡λ©λλ€.
- μ½λ νΈμ§κΈ°: Visual Studio Code, Sublime Text λλ Atomμ΄ λ리 μ¬μ©λ©λλ€.
μ νλ‘μ νΈ λλ ν 리λ₯Ό μμ±νκ³ Node.js νλ‘μ νΈλ₯Ό μ΄κΈ°νν©λλ€.
mkdir my-chatbot
cd my-chatbot
npm init -y
μ±λ΄ νλ μμν¬ μ ν
λͺ κ°μ§ Node.js νλ μμν¬λ₯Ό μ¬μ©νλ©΄ μ±λ΄ κ°λ°μ λ¨μνν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΈκΈ° μλ μ΅μ μ λλ€.
- Dialogflow(Google Cloud): μ¬μ ꡬμΆλ ν΅ν©κ³Ό μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ₯Ό κ°μΆ κ°λ ₯ν NLP νλ«νΌμ λλ€.
- Rasa: μν©λ³ AI μ΄μμ€ν΄νΈ ꡬμΆμ μν μ€ν μμ€ νλ μμν¬μ λλ€.
- Microsoft Bot Framework: λ€μν μ±λμμ λ΄μ ꡬμΆνκ³ λ°°ν¬νκΈ° μν ν¬κ΄μ μΈ νλ«νΌμ λλ€.
- Botpress: μκ°μ νλ¦ νΈμ§κΈ°κ° μλ μ€ν μμ€ λνν AI νλ«νΌμ λλ€.
- Telegraf: Telegram λ΄μ©μΌλ‘ μ€κ³λ νλ μμν¬μ λλ€.
μ΄ κ°μ΄λμμλ μ¬μ© νΈμμ±κ³Ό κ΄λ²μν κΈ°λ₯μ κ³ λ €νμ¬ Dialogflowλ₯Ό μ¬μ©ν©λλ€. κ·Έλ¬λ μ€λͺ λ μ리λ λ€λ₯Έ νλ μμν¬μλ μ μ©ν μ μμ΅λλ€.
Dialogflowλ₯Ό Node.jsμ ν΅ν©
1λ¨κ³: Dialogflow μμ΄μ νΈ μμ±
Dialogflow μ½μ(dialogflow.cloud.google.com)λ‘ μ΄λνμ¬ μ μμ΄μ νΈλ₯Ό λ§λλλ€. μ΄λ¦μ μ§μ νκ³ μ νΈνλ μΈμ΄μ μ§μμ μ νν©λλ€. μ΄λ κ² νλ €λ©΄ Google Cloud νλ‘μ νΈκ° νμν μ μμ΅λλ€.
2λ¨κ³: μλ μ μ
μλλ μ¬μ©μμ μλλ₯Ό λνλ λλ€. "μΈμ¬", "νκ³΅νΈ μμ½" λλ "λ μ¨ μ 보 κ°μ Έμ€κΈ°"μ κ°μ μΌλ°μ μΈ μ¬μ©μ μμ²μ λν μλλ₯Ό λ§λλλ€. κ° μλμλ νλ ¨ ꡬ문(μ¬μ©μκ° λ§ν μ μλ μ)κ³Ό μμ /λ§€κ°λ³μ(μ±λ΄μ΄ μνν΄μΌ νκ±°λ μ¬μ©μμ μ λ ₯μμ μΆμΆν΄μΌ νλ λ΄μ©)κ° ν¬ν¨λμ΄ μμ΅λλ€.
μ: "μΈμ¬" μλ
- νλ ¨ ꡬ문: "μλ νμΈμ", "μλ ", "μ’μ μμΉ¨μ λλ€", "μλ νμΈμ"
- μμ : `greeting`
- μλ΅: "μλ νμΈμ! μ€λ 무μμ λμλ릴κΉμ?"
3λ¨κ³: Fulfillment μ€μ
Fulfillmentλ₯Ό μ¬μ©νλ©΄ Dialogflow μμ΄μ νΈκ° μΈλΆ λ°μ΄ν° λλ λ Όλ¦¬κ° νμν μμ μ μννκΈ° μν΄ λ°±μλ μλΉμ€(Node.js μλ²)μ μ°κ²°ν μ μμ΅λλ€. Dialogflow μμ΄μ νΈ μ€μ μμ μΉν ν΅ν©μ νμ±νν©λλ€.
4λ¨κ³: Dialogflow ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬ μ€μΉ
Node.js νλ‘μ νΈμμ Dialogflow ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉν©λλ€.
npm install @google-cloud/dialogflow
5λ¨κ³: Node.js μλ² μμ±
μλ² νμΌ(μ: `index.js`)μ μμ±νκ³ Dialogflow μΉν μμ²μ μ²λ¦¬νκΈ° μν΄ κΈ°λ³Έ Express μλ²λ₯Ό μ€μ ν©λλ€.
const express = require('express');
const { SessionsClient } = require('@google-cloud/dialogflow');
const app = express();
const port = process.env.PORT || 3000;
app.use(express.json());
// Replace with your project ID and agent path
const projectId = 'YOUR_PROJECT_ID';
const agentPath = 'YOUR_AGENT_PATH'; // e.g., projects/YOUR_PROJECT_ID/agent
const languageCode = 'en-US';
const sessionClient = new SessionsClient({ keyFilename: 'path/to/your/service-account-key.json' });
app.post('/dialogflow', async (req, res) => {
const sessionPath = sessionClient.sessionPath(projectId, req.body.session);
const request = {
session: sessionPath,
queryInput: {
text: {
text: req.body.queryResult.queryText,
languageCode: languageCode,
},
},
};
try {
const responses = await sessionClient.detectIntent(request);
const result = responses[0].queryResult;
console.log(` Query: ${result.queryText}`);
console.log(` Response: ${result.fulfillmentText}`);
res.json({
fulfillmentText: result.fulfillmentText,
});
} catch (error) {
console.error('ERROR:', error);
res.status(500).send('Error processing request');
}
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
μ€μ: `YOUR_PROJECT_ID`μ `YOUR_AGENT_PATH`λ₯Ό μ€μ Dialogflow νλ‘μ νΈ IDμ μμ΄μ νΈ κ²½λ‘λ‘ λ°κΏλλ€. λν `path/to/your/service-account-key.json`μ μλΉμ€ κ³μ ν€ νμΌμ κ²½λ‘λ‘ λ°κΏλλ€. Google Cloud Console IAM & Admin μΉμ μμ μ΄ νμΌμ λ€μ΄λ‘λν μ μμ΅λλ€.
6λ¨κ³: μλ² λ°°ν¬
Heroku, Google Cloud Functions λλ AWS Lambdaμ κ°μ νΈμ€ν νλ«νΌμ Node.js μλ²λ₯Ό λ°°ν¬ν©λλ€. Dialogflow μμ΄μ νΈ μΉν μ΄ λ°°ν¬λ μλ²μ URLμ κ°λ¦¬ν€λλ‘ κ΅¬μ±λμ΄ μλμ§ νμΈνμμμ€.
μ¬μ©μ μ λ ₯ λ° μλ΅ μ²λ¦¬
μ μ½λλ Dialogflowμμ μ¬μ©μ μ λ ₯μ μμ νκ³ , Dialogflow APIλ₯Ό μ¬μ©νμ¬ μ²λ¦¬νκ³ , μ¬μ©μμκ² μλ΅μ λ€μ 보λ΄λ λ°©λ²μ 보μ¬μ€λλ€. κ°μ§λ μλμ μΆμΆλ λ§€κ°λ³μλ₯Ό κΈ°λ°μΌλ‘ μλ΅μ μ¬μ©μ μ§μ ν μ μμ΅λλ€.
μ: λ μ¨ μ 보 νμ
λμ μ΄λ¦μ λ§€κ°λ³μλ‘ μΆμΆνλ "get_weather"λΌλ μλκ° μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. λ μ¨ APIλ₯Ό μ¬μ©νμ¬ λ μ¨ λ°μ΄ν°λ₯Ό κ°μ Έμ λμ μλ΅μ ꡬμ±ν μ μμ΅λλ€.
// Inside your /dialogflow route handler
if (result.intent.displayName === 'get_weather') {
const city = result.parameters.fields.city.stringValue;
const weatherData = await fetchWeatherData(city);
if (weatherData) {
const responseText = `The weather in ${city} is ${weatherData.temperature}Β°C and ${weatherData.condition}.`;
res.json({ fulfillmentText: responseText });
} else {
res.json({ fulfillmentText: `Sorry, I couldn't retrieve the weather information for ${city}.` });
}
}
μ΄ μμ μμ `fetchWeatherData(city)`λ μ§μ λ λμμ λ μ¨ λ°μ΄ν°λ₯Ό κ²μνκΈ° μν΄ λ μ¨ API(μ: OpenWeatherMap)λ₯Ό νΈμΆνλ ν¨μμ λλ€. `axios` λλ `node-fetch`μ κ°μ μ μ ν HTTP ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μ΄ ν¨μλ₯Ό ꡬνν΄μΌ ν©λλ€.
κ³ κΈ μ±λ΄ κΈ°λ₯
κΈ°λ³Έ μ±λ΄μ΄ μ€νλλ©΄ κ³ κΈ κΈ°λ₯μ νμνμ¬ κΈ°λ₯κ³Ό μ¬μ©μ κ²½νμ ν₯μμν¬ μ μμ΅λλ€.
- 컨ν μ€νΈ κ΄λ¦¬: Dialogflowμ 컨ν μ€νΈ κΈ°λ₯μ μ¬μ©νμ¬ μνλ₯Ό μ μ§νκ³ λν νλ¦μ μΆμ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ±λ΄μ μ΄μ μ¬μ©μ μ λ ₯μ κΈ°μ΅νκ³ λ³΄λ€ κ΄λ ¨μ± μλ μλ΅μ μ 곡ν μ μμ΅λλ€.
- μν°ν°: μ ν μ΄λ¦, λ μ§ λλ μμΉμ κ°μ νΉμ μ νμ λ°μ΄ν°λ₯Ό μΈμνλλ‘ μ¬μ©μ μ§μ μν°ν°λ₯Ό μ μν©λλ€.
- Fulfillment λΌμ΄λΈλ¬λ¦¬: Facebook Messenger, Slack λλ Telegramκ³Ό κ°μ νλ«νΌμμ μ 곡νλ ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμ¬ μΊλ¬μ λ° λΉ λ₯Έ λ΅μ₯κ³Ό κ°μ νλ«νΌλ³ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
- κ°μ± λΆμ: κ°μ± λΆμ APIλ₯Ό ν΅ν©νμ¬ μ¬μ©μμ κ°μ μνλ₯Ό κ°μ§νκ³ κ·Έμ λ°λΌ μλ΅μ λ§μΆ€νν©λλ€. μ΄λ λΆμ μ μΈ νΌλλ°±μ μ²λ¦¬νκ±°λ 곡κ°μ μΈ μ§μμ μ 곡νλ λ° νΉν μ μ©ν μ μμ΅λλ€. Google Cloud Natural Language API λλ Azure Text Analyticsμ κ°μ λꡬλ₯Ό μ¬μ©ν μ μμ΅λλ€.
- λ¨Έμ λ¬λ ν΅ν©: λ¨Έμ λ¬λ λͺ¨λΈμ ν΅ν©νμ¬ μ¬μ©μ μλμ λν μ±λ΄μ μ΄ν΄λ₯Ό κ°μ νκ³ λ³΄λ€ μ ννκ³ κ°μΈνλ μλ΅μ μ 곡ν©λλ€. μλ₯Ό λ€μ΄ TensorFlow λλ PyTorchλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ§μ μλ λΆλ₯ λͺ¨λΈμ νλ ¨ν μ μμ΅λλ€.
- λ€κ΅μ΄ μ§μ: μ¬λ¬ μΈμ΄λ‘ μ΄ν΄νκ³ μλ΅ν μ μλ μ±λ΄μ ꡬμΆν©λλ€. Dialogflowλ μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ©° λ²μ APIλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ λ ₯ λ° μλ΅μ λ²μν μ μμ΅λλ€.
- λΆμ: μ±λ΄ μ¬μ© λ° μ±λ₯μ μΆμ νμ¬ κ°μ μμμ νμ ν©λλ€. λν κΈΈμ΄, μλ μΈμ μ νλ λ° μ¬μ©μ λ§μ‘±λμ κ°μ μ§νλ₯Ό λͺ¨λν°λ§ν©λλ€.
- κ°μΈν: μ¬μ©μ κΈ°λ³Έ μ€μ λ° κΈ°λ‘ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ±λ΄μ μλ΅ λ° λμμ λ§μΆ€νν©λλ€. μ¬κΈ°μλ CRM μμ€ν λλ μ¬μ©μ νλ‘ν λ°μ΄ν°λ² μ΄μ€μμ ν΅ν©μ΄ ν¬ν¨λ μ μμ΅λλ€.
- μΈκ° μμ΄μ νΈμκ² λκΈ°κΈ°: μ±λ΄μ΄ μ¬μ©μμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ κ²½μ° μΈκ° μμ΄μ νΈμκ² μννκ² λ겨μ€λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ νμ νμν λμμ λ°μ μ μμ΅λλ€. Zendesk λ° Salesforceμ κ°μ νλ«νΌμ μ΄λ¬ν λͺ©μ μΌλ‘ ν΅ν©μ μ 곡ν©λλ€.
- μ¬μ μλ°©μ μλ¦Ό: μ¬μ©μλ₯Ό μ°Έμ¬μν€κ³ μ μμ μ λ°μ΄νΈλ₯Ό μ 곡νκΈ° μν΄ μ¬μ μλ°©μ μλ¦Όμ ꡬνν©λλ€. μλ₯Ό λ€μ΄ μ±λ΄μ ν¨ν€μ§κ° λ°°μ‘λμκ±°λ μ½μ μκ°μ΄ λ€κ°μ€λ©΄ μλ¦Όμ λ³΄λΌ μ μμ΅λλ€. μ¬μ©μ κΈ°λ³Έ μ€μ μ μΌλμ λκ³ μμΉ μλ μλ¦Όμ 보λ΄μ§ λ§μμμ€.
μ±λ΄ κ°λ°μ μν λͺ¨λ² μ¬λ‘
μ±λ΄μ κ°λ°ν λ λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€.
- λͺ νν λͺ©μ μ μ: μ±λ΄μ λͺ©μ κ³Ό μνν μ μλ μμ μ λͺ ννκ² μ μν©λλ€. μ΄λ κ² νλ©΄ λΆνμν κΈ°λ₯μ μΆκ°νμ§ μκ³ μ§μ€νλ λ° λμμ΄ λ©λλ€.
- λν νλ¦ μ€κ³: μμ°μ€λ½κ³ μ§κ΄μ μΈ μ¬μ©μ κ²½νμ 보μ₯νκΈ° μν΄ λν νλ¦μ μ μ€νκ² κ³νν©λλ€. μκ°μ νλ¦ νΈμ§κΈ° λλ λ€μ΄μ΄κ·Έλ¨ λꡬλ₯Ό μ¬μ©νμ¬ λ€μν λν κ²½λ‘λ₯Ό λ§€νν©λλ€.
- μμ°μ΄ μ¬μ©: λͺ ννκ³ κ°κ²°νλ©° λν μ€νμΌλ‘ μλ΅μ μμ±ν©λλ€. κΈ°μ μ μΈ μ λ¬Έ μ©μ΄ λλ μ§λμΉκ² 곡μμ μΈ μΈμ΄λ₯Ό μ¬μ©νμ§ λ§μμμ€.
- μ€λ₯λ₯Ό μ μ νκ² μ²λ¦¬: μ μ¬μ μΈ μ€λ₯λ₯Ό μμνκ³ μ μ΅ν μ€λ₯ λ©μμ§λ₯Ό μ 곡ν©λλ€. λ체 μ΅μ μ μ 곡νκ±°λ μ¬μ©μκ° μ§νν μ μλ λ°©λ²μ μ μν©λλ€.
- μ² μ νκ² ν μ€νΈ: μ€μ μ¬μ©μλ‘ μ±λ΄μ κ΄λ²μνκ² ν μ€νΈνμ¬ μ¬μ©μ± λ¬Έμ λ₯Ό μλ³νκ³ μ νμ±μ κ°μ ν©λλ€. A/B ν μ€νΈλ₯Ό μ¬μ©νμ¬ μ±λ΄μ λ€λ₯Έ λ²μ μ λΉκ΅νκ³ μ±λ₯μ μ΅μ νν©λλ€.
- λͺ νν μ§μΉ¨ μ 곡: μ¬μ©μλ₯Ό μλ΄νκ³ μ¬μ©ν μ μλ λͺ λ Ήμ λͺ ννκ² λ§λλλ€. μκ° λ©μμ§μ λμλ§ κΈ°λ₯μ μ¬μ©ν©λλ€.
- μ¬μ©μ κ°μΈ μ 보 보νΈ: μ¬μ©μμ λ°μ΄ν°λ₯Ό μμ§νκ³ μ¬μ©νλ λ°©λ²μ λν΄ ν¬λͺ νκ² μ€λͺ ν©λλ€. λ―Όκ°ν μ 보λ₯Ό μμ§νκΈ° μ μ λμλ₯Ό μ»κ³ μ¬μ©μμκ² κ°μΈ μ 보 μ€μ μ μ μ΄ν μ μλ μ΅μ μ μ 곡ν©λλ€. GDPR λ° CCPAμ κ°μ κ΄λ ¨ λ°μ΄ν° κ°μΈ μ 보 λ³΄νΈ κ·μ μ μ€μν©λλ€.
- λ°λ³΅ λ° κ°μ : μ±λ΄ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ λΆμν©λλ€. μ¬μ©μ νΌλλ°± λ° λΆμ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ νλ ¨ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈνκ³ , μλ‘μ΄ κΈ°λ₯μ μΆκ°νκ³ , λν νλ¦μ κ°μ ν©λλ€.
- μ κ·Όμ± κ³ λ €: μ κ·Όμ±μ μΌλμ λκ³ μ±λ΄μ μ€κ³ν©λλ€. μκ° μ₯μ , μ²κ° μ₯μ λλ μΈμ§ μ₯μ κ° μλ μ¬λμ ν¬ν¨νμ¬ μ₯μ κ° μλ μ¬λμ΄ μ¬μ©ν μ μλμ§ νμΈν©λλ€. λ체 μ λ ₯ λ°©λ²(μ: μμ± μ λ ₯)μ μ 곡νκ³ μ±λ΄μ΄ 보쑰 κΈ°μ κ³Ό νΈνλλμ§ νμΈν©λλ€.
- λΈλλ μΌκ΄μ± μ μ§: μ±λ΄μ μ΄μ‘°, μ€νμΌ λ° μκ°μ λͺ¨μμ΄ λΈλλ μμ΄λ΄ν°ν°μ μΌμΉνλμ§ νμΈν©λλ€. λ€λ₯Έ λ§μΌν μλ£μ λμΌν λ‘κ³ , μμ λ° κΈκΌ΄μ μ¬μ©ν©λλ€.
μ κ³ μ λ°μ μ±λ΄ μμ
μ±λ΄μ μμ μ μλννκ³ , κ³ κ° μλΉμ€λ₯Ό κ°μ νκ³ , μ¬μ©μ κ²½νμ ν₯μμν€κΈ° μν΄ κ΄λ²μν μ°μ μμ μ¬μ©λκ³ μμ΅λλ€. λͺ κ°μ§ μλ λ€μκ³Ό κ°μ΅λλ€.
- μ μ μκ±°λ: μ ν μΆμ²μ μ 곡νκ³ , κ³ κ° λ¬Έμμ λ΅λ³νκ³ , μ£Όλ¬Έμ μ²λ¦¬ν©λλ€. μλ₯Ό λ€μ΄ Sephoraλ Kikμμ μ±λ΄μ μ¬μ©νμ¬ λ©μ΄ν¬μ νν λ¦¬μΌ λ° μ ν μΆμ²μ μ 곡ν©λλ€.
- μλ£: μ½μμ μμ½νκ³ , μλ£ μ 보λ₯Ό μ 곡νλ©°, κ°μ μλ΄μ μ 곡ν©λλ€. Babylon Healthλ μ¦μ νμΈμ μ 곡νκ³ μ¬μ©μλ₯Ό μμ¬μκ² μ°κ²°νλ μ±λ΄μ μ 곡ν©λλ€.
- κΈμ΅: κ³μ μ 보λ₯Ό μ 곡νκ³ , κ±°λλ₯Ό μ²λ¦¬νλ©°, κΈμ΅ μ‘°μΈμ μ 곡ν©λλ€. Bank of Americaμ Erica μ±λ΄μ μ¬μ©νλ©΄ μ¬μ©μκ° κ³μ μ κ΄λ¦¬νκ³ κ°μΈνλ κΈμ΅ ν΅μ°°λ ₯μ μ»μ μ μμ΅λλ€.
- μ¬ν: νκ³΅νΈ λ° νΈν μ μμ½νκ³ , μ¬ν μΆμ²μ μ 곡νλ©°, κ³ κ° μ§μμ μ 곡ν©λλ€. Kayakμ μ±λ΄μ μ¬μ©νμ¬ μ¬μ©μκ° ν곡νΈ, νΈν λ° λ ν°μΉ΄λ₯Ό κ²μνλλ‘ λμ΅λλ€.
- κ΅μ‘: κ³Όμ μ 보λ₯Ό μ 곡νκ³ , νμ μ§λ¬Έμ λ΅λ³νλ©°, νν°λ§ μλΉμ€λ₯Ό μ 곡ν©λλ€. μ‘°μ§μ 주립 λνκ΅λ PounceλΌλ μ±λ΄μ μ¬μ©νμ¬ μ μ¬μ μΈ νμμ μ§λ¬Έμ λ΅λ³ν©λλ€.
- κ³ κ° μλΉμ€: μ μΈκ³μ κΈ°μ μ μ±λ΄μ μ¬μ©νμ¬ FAQλ₯Ό μ²λ¦¬νκ³ , κΈ°λ³Έ μ§μμ μ 곡νλ©°, 볡μ‘ν λ¬Έμ λ₯Ό μΈκ° μμ΄μ νΈμκ² λΌμ°ν ν©λλ€. μλ₯Ό λ€μ΄ ν곡μ¬λ μ±λ΄μ μ¬μ©νμ¬ μνλ¬Ό νμ©λ λλ λ³κ²½ νκ³΅νΈ μ 보μ κ΄λ ¨λ μ§λ¬Έμ λ΅λ³ν μ μμ΅λλ€.
κ²°λ‘
Node.jsλ‘ μ±λ΄μ ꡬμΆνλ κ²μ μμ μ μλννκ³ , κ³ κ° μλΉμ€λ₯Ό κ°μ νκ³ , μ¬μ©μ κ²½νμ ν₯μμν€λ κ°λ ₯ν λ°©λ²μ λλ€. Node.js λ° Dialogflowμ κ°μ μ±λ΄ νλ μμν¬μ κΈ°λ₯μ νμ©νμ¬ μ¬μ©μμ μꡬ μ¬νμ μΆ©μ‘±νλ μ§λ₯ν λνν μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ , μ±λ΄μ μ§μμ μΌλ‘ ν μ€νΈνκ³ κ°μ νλ©°, μ¬μ©μ κ°μΈ μ 보 λ³΄νΈ λ° μ κ·Όμ±μ μ°μ μνμμμ€.
μΈκ³΅ μ§λ₯μ΄ κ³μ λ°μ ν¨μ λ°λΌ μ±λ΄μ λμ± μ κ΅ν΄μ§κ³ μ°λ¦¬μ μΌμ μνμ ν΅ν©λ κ²μ λλ€. Node.jsλ₯Ό μ¬μ©ν μ±λ΄ κ°λ°μ λ§μ€ν°ν¨μΌλ‘μ¨ μ΄ ν₯λ―Έλ‘μ΄ κΈ°μ μ μ΅μ μ μ μμ μ μΈκ³ κΈ°μ κ³Ό κ°μΈμκ² λμμ΄ λλ νμ μ μΈ μ루μ μ λ§λ€ μ μμ΅λλ€.